Contemporary operating systems (e.g., Microsoft Windows® 2000/NT® operating systems and the like) can change and/or fix behavioral errors (“errata”) in microprocessor hardware by downloading microcode patches to the microprocessor. The microcode patch that is downloaded is specific to the stepping (version) of the microprocessor, and serves to fix known behavior problems and errata for the particular stepping.
Many current multiprocessor operating systems operate on the assumption that all microprocessors in a multiprocessor system are of the same stepping and include the same errata. In addition, there is an expectation within many current operating systems that all microprocessors in the multiprocessor system are sourced from the same microprocessor manufacturer, are set to run at the same clock speed, and have the same feature set (e.g., on-chip or in-package cache sizes and the like). Putting more than one microprocessor stepping in a system may result in anomalous behavior including system stalls, crashes and boot failures.
In addition, when the steppings of multiple microprocessors are different, some operating systems download a microcode patch for fixing the errata on only one microprocessor stepping, and that microcode patch may not be appropriate to fix the errata on other microprocessors in the system, or may even cause instability for the other microprocessors. For example, in a multiprocessor system running a Windows NT®-based operating system, the same microcode patch is downloaded to all microprocessors based upon the microcode needed by the bootstrap microprocessor. If the bootstrap microprocessor is an earlier stepping than that of another microprocessor in the system, the fixes are normally already built into the hardware in the later microprocessor stepping. Although microprocessor designers work with a goal of ensuring that mixed-stepping systems, in which the lowest stepping is the bootstrap microprocessor, can function (i.e. that a “later” stepping can have earlier microcode patches applied to it and still function properly), there are cases where applying early microcode to later-stepping microprocessors appears to cause system instability. If the bootstrap microprocessor is a later stepping than that of another microprocessor in the system, the fixes applicable to the new microprocessor (if any) are normally inadequate to address the errata in the earlier microprocessors.